/**
 * 服装类，继承自商品基类
 * 包含服装特有的属性和方法
 */
public class ClothingProduct extends Product {
    private String size;       // 尺码
    private String color;      // 颜色
    private String material;   // 材质
    private String gender;     // 适用性别

    /**
     * 构造方法
     * @param productId 商品编号
     * @param name 商品名称
     * @param price 商品价格
     * @param description 商品描述
     * @param stock 库存数量
     * @param size 尺码
     * @param color 颜色
     * @param material 材质
     * @param gender 适用性别
     * @throws InvalidPriceException 当价格无效时抛出异常
     */
    public ClothingProduct(String productId, String name, double price, String description, int stock,
                          String size, String color, String material, String gender) throws InvalidPriceException {
        super(productId, name, price, description, stock);
        this.size = size != null ? size : "";
        this.color = color != null ? color : "";
        this.material = material != null ? material : "";
        this.gender = gender != null ? gender : "";
    }

    /**
     * 获取尺码
     * @return 服装尺码
     */
    public String getSize() {
        return size;
    }

    /**
     * 设置尺码
     * @param size 服装尺码，自动处理null值
     */
    public void setSize(String size) {
        this.size = size != null ? size : "";
    }

    /**
     * 获取颜色
     * @return 服装颜色
     */
    public String getColor() {
        return color;
    }

    /**
     * 设置颜色
     * @param color 服装颜色，自动处理null值
     */
    public void setColor(String color) {
        this.color = color != null ? color : "";
    }

    /**
     * 获取材质
     * @return 服装材质
     */
    public String getMaterial() {
        return material;
    }

    /**
     * 设置材质
     * @param material 服装材质，自动处理null值
     */
    public void setMaterial(String material) {
        this.material = material != null ? material : "";
    }

    /**
     * 获取适用性别
     * @return 适用性别
     */
    public String getGender() {
        return gender;
    }

    /**
     * 设置适用性别
     * @param gender 适用性别，自动处理null值
     */
    public void setGender(String gender) {
        this.gender = gender != null ? gender : "";
    }

    /**
     * 检查是否为通用尺码
     * @return 是否为通用尺码
     */
    public boolean isUniversalSize() {
        return size.equalsIgnoreCase("ONE SIZE") || size.equalsIgnoreCase("均码");
    }

    /**
     * 获取材质护理建议
     * @return 护理建议字符串
     */
    public String getCareInstructions() {
        if (material.contains("棉") || material.contains("cotton")) {
            return "建议手洗或温和机洗，避免暴晒";
        } else if (material.contains("羊毛") || material.contains("wool")) {
            return "建议干洗，避免水洗变形";
        } else if (material.contains("丝") || material.contains("silk")) {
            return "建议轻柔手洗，使用专用洗涤剂";
        } else {
            return "请参照标签上的洗涤说明";
        }
    }

    /**
     * 实现父类的抽象方法，提供服装的详细信息
     * @return 服装详细信息
     */
    @Override
    public String getDetails() {
        StringBuilder details = new StringBuilder();
        details.append(super.toString()).append("\n");
        details.append("类型: 服装\n");
        details.append("尺码: " + size + "\n");
        details.append("颜色: " + color + "\n");
        details.append("材质: " + material + "\n");
        details.append("适用性别: " + gender + "\n");
        details.append("护理建议: " + getCareInstructions() + "\n");
        details.append("描述: " + getDescription());
        return details.toString();
    }

    /**
     * 返回服装的字符串表示形式
     * @return 包含服装基本信息的字符串
     */
    @Override
    public String toString() {
        return super.toString() + ", 尺码: " + size + ", 颜色: " + color + ", 材质: " + material;
    }
}